/*************************************************
Ceebic
File name: // HEATMETER_EEPROM
Author: // Fyman
Version: // 1.0
Date: // 完成日期
Description: //用于详细说明此程序文件完成的主要功能，与其他模块或函数的接口，输出值、取值范
围、含义及参数间的控制、顺序、独立或依赖等关系
Others: // 其它内容的说明
Function List: // 主要函数列表，每条记录应包括函数名及功能简要说明
1. ....
History: // 修改历史记录列表，每条修改记录应包括修改日期、修改者及修改内容简述
1. Date:
Author:
Modification:
2. ...
*************************************************/

/******************************************************************************/
/* Include files                                                              */

#ifndef __CC_EEPROM_H__
#define __CC_EEPROM_H__

#include "ddl.h"


/*---------------------------------------------------------------------------*
                               Dependencies                                  *
-----------------------------------------------------------------------------*/

#define EEPROM_PAGESIZE 128 
#define EEPROM_SIZE     0xffff 
#define lastyear    1
#define currentyear 0


#define ee_add            0x0000  //户表地址存储地址
#define ee_sumflow        0x0007  //累计流量存储地址
#define ee_sumflow_unit   0x000B  //累计流量单位存储地址
#define ee_sumheat        0x000C  //累计热量存储地址
#define ee_sumheat_unit   0x0010  //累计热量单位存储地址
#define ee_sumcold        0x0011  //累计冷量存储地址
#define ee_sumcold_unit   0x0015  //累计冷量单位存储地址
#define ee_dailyflow      0x0020  //日累计流量存储地址
#define ee_dailyflow_unit 0x0024  //日累计流量单位存储地址
#define ee_dailyheat      0x0025  //日累计热量存储地址
#define ee_dailyheat_unit 0x0029  //日累计热量单位存储地址
#define ee_dailycold      0x0030  //日累计冷量存储地址
#define ee_dailycold_unit 0x0034  //日累计冷量单位存储地址
#define ee_calibre        0x0035  //仪表口径存储地址
#define ee_dist           0x0036  //传感器距离存储地址
#define ee_worktime       0x0037  //累计工作时间存储地址
#define ee_coef1_1        0x003B  //一声道第1流量点系数存储地址
#define ee_coef1_2        0x003F  //一声道第2流量点系数存储地址
#define ee_coef1_3        0x0043  //一声道第3流量点系数存储地址
#define ee_coef1_4        0x0047  //一声道第4流量点系数存储地址
#define ee_coef1_5        0x004B  //一声道第5流量点系数存储地址
#define ee_coef2_1        0x004F  //二声道第1流量点系数存储地址
#define ee_coef2_2        0x0057  //二声道第2流量点系数存储地址
#define ee_coef2_3        0x005B  //二声道第3流量点系数存储地址
#define ee_coef2_4        0x005F  //二声道第4流量点系数存储地址
#define ee_coef2_5        0x0067  //二声道第5流量点系数存储地址
#define ee_coef3_1        0x006B  //三声道第1流量点系数存储地址
#define ee_coef3_2        0x0077  //三声道第2流量点系数存储地址
#define ee_coef3_3        0x007B  //三声道第3流量点系数存储地址
#define ee_coef3_4        0x007F  //三声道第4流量点系数存储地址
#define ee_coef3_5        0x0087  //三声道第5流量点系数存储地址
#define ee_coef4_1        0x008B  //四声道第1流量点系数存储地址
#define ee_coef4_2        0x008F  //四声道第2流量点系数存储地址
#define ee_coef4_3        0x0097  //四声道第3流量点系数存储地址
#define ee_coef4_4        0x009B  //四声道第4流量点系数存储地址
#define ee_coef4_5        0x009F  //四声道第5流量点系数存储地址
#define ignore1_add       0x00A3  //一声道始动量存储地址
#define ignore2_add       0x00A5  //二声道始动量存储地址
#define ignore3_add       0x00A7  //三声道始动量存储地址
#define ignore4_add       0x00A9  //四声道始动量存储地址
#define static_time1_add  0x00AB  //一声道静止时间差存储地址
#define static_time2_add  0x00AD  //二声道静止时间差存储地址
#define static_time3_add  0x00AF  //三声道静止时间差存储地址
#define static_time4_add  0x00B1  //四声道静止时间差存储地址
#define pipeline1_add     0x00B3  //一声道管道长度存储地址
#define pipeline2_add     0x00B7  //二声道管道长度存储地址
#define pipeline3_add     0x00BB  //三声道管道长度存储地址
#define pipeline4_add     0x00BF  //四声道管道长度存储地址
#define ee_flowpoint1_1   0x00C3  //一声道第1流量点节点差存储地址
#define ee_flowpoint1_2   0x00C7  //一声道第2流量点节点差存储地址
#define ee_flowpoint1_3   0x00CB  //一声道第3流量点节点差存储地址
#define ee_flowpoint1_4   0x00CF  //一声道第4流量点节点差存储地址
#define ee_flowpoint1_5   0x00C3  //一声道第5流量点节点差存储地址
#define ee_flowpoint2_1   0x00C7  //二声道第1流量点节点差存储地址
#define ee_flowpoint2_2   0x00CB  //二声道第2流量点节点差存储地址
#define ee_flowpoint2_3   0x00CF  //二声道第3流量点节点差存储地址
#define ee_flowpoint2_4   0x00D3  //二声道第4流量点节点差存储地址
#define ee_flowpoint2_5   0x00D7  //二声道第5流量点节点差存储地址
#define ee_flowpoint3_1   0x00DB  //三声道第1流量点节点差存储地址
#define ee_flowpoint3_2   0x00DF  //三声道第2流量点节点差存储地址
#define ee_flowpoint3_3   0x00E3  //三声道第3流量点节点差存储地址
#define ee_flowpoint3_4   0x00E7  //三声道第4流量点节点差存储地址
#define ee_flowpoint3_5   0x00EB  //三声道第5流量点节点差存储地址
#define ee_flowpoint4_1   0x00EF  //四声道第1流量点节点差存储地址
#define ee_flowpoint4_2   0x00F3  //四声道第2流量点节点差存储地址
#define ee_flowpoint4_3   0x00F7  //四声道第3流量点节点差存储地址
#define ee_flowpoint4_4   0x00FB  //四声道第4流量点节点差存储地址
#define ee_flowpoint4_5   0x00FF  //四声道第5流量点节点差存储地址(分页)

#define ee_pos                0x0100  //表安装位置存储地址
#define ee_kind               0x0101  //表类型存储地址
#define ee_channel_number     0x0102  //声道数存储地址
#define ee_serial_baudrate_H  0x0103  //串口通信波特率高位存储地址
#define ee_serial_baudrate_L  0x0104  //串口通信波特率低位存储地址
#define ee_serial_check       0x0105  //串口通信检验位存储地址

#define ee_unit0  0x0106  //单位设置变量1存储地址
#define ee_unit1  0x0107  //单位设置变量2存储地址
#define ee_unit2  0x0108  //单位设置变量3存储地址

#define ee_time_year   0x0110  //当前年份存储地址
#define ee_time_month  0x0111  //当前月份存储地址
#define ee_time_day    0x0112  //当前日期存储地址
#define ee_time_hour   0x0113  //当前小时数存储地址
#define ee_time_minute 0x0114  //当前分钟存储地址
#define ee_time_second 0x0115  //当前秒数存储地址

#define ee_monthly_flow       0x0116   //月度累积流量存储地址
#define ee_monthly_flow_unit  0x011A   //月度累积流量单位存储地址
#define ee_monthly_heat       0x011B   //月度累积热量存储地址
#define ee_monthly_heat_unit  0x011F   //月度累积热量单位存储地址
#define ee_monthly_cold       0x0120   //月度累积冷量存储地址
#define ee_monthly_cold_unit  0x0124   //月度累积冷量单位存储地址

#define ee_month_heatdata_basic1   0x0181   //月度累积热量基础存储地址1（页首）
#define ee_month_heatunit_basic1   0x0185   //月度累积热量单位基础存储地址1
#define ee_month_colddata_basic1   0x0186   //月度累积冷量基础存储地址1
#define ee_month_coldunit_basic1   0x018A   //月度累积冷量单位基础存储地址1
#define ee_month_flowdata_basic1   0x018B   //月度累积流量基础存储地址1
#define ee_month_flowunit_basic1   0x018F   //月度累积流量单位基础存储地址1


#define ee_month_heatdata_basic2   0x0781   //月度累积热量基础存储地址1（页首）
#define ee_month_heatunit_basic2   0x0785   //月度累积热量单位基础存储地址1
#define ee_month_colddata_basic2   0x0786   //月度累积冷量基础存储地址1
#define ee_month_coldunit_basic2   0x078A   //月度累积冷量单位基础存储地址1
#define ee_month_flowdata_basic2   0x078B   //月度累积流量基础存储地址1
#define ee_month_flowunit_basic2   0x078F   //月度累积流量单位基础存储地址1


#define ee_day_heatdata_basic   0x0D81   //当天累积热量基础存储地址
#define ee_day_heatunit_basic   0x0D85   //当天累积热量单位基础存储地址
#define ee_day_colddata_basic   0x0D86   //当天累积冷量基础存储地址
#define ee_day_coldunit_basic   0x0D8A   //当天累积冷量单位基础存储地址
#define ee_day_flowdata_basic   0x0D8B   //当天累积流量基础存储地址
#define ee_day_flowunit_basic   0x0D8F   //当天累积流量单位基础存储地址
#define ee_datadate_year_basic  0x0D90   //当天累积流量对应年份基础存储地址
#define ee_datadate_month_basic 0x0D91   //当天累积流量对应年份基础存储地址
#define ee_datadate_day_basic   0x0D92   //当天累积流量对应年份基础存储地址


//#define ee_day_heatdata_basic2   0xC481   //当天累积热量基础存储地址
//#define ee_day_heatunit_basic2   0xC485   //当天累积热量单位基础存储地址
//#define ee_day_colddata_basic2   0xC486   //当天累积冷量基础存储地址
//#define ee_day_coldunit_basic2   0xC48A   //当天累积冷量单位基础存储地址
//#define ee_day_flowdata_basic2   0xC48B   //当天累积流量基础存储地址
//#define ee_day_flowunit_basic2   0xC48F   //当天累积流量单位基础存储地址
//#define ee_datadate_year_basic2  0xC490   //当天累积流量对应年份基础存储地址
//#define ee_datadate_month_basic2 0xC491   //当天累积流量对应年份基础存储地址
//#define ee_datadate_day_basic2   0xC492   //当天累积流量对应年份基础存储地址


//typedef struct
//{

//	uint8_t pos[2];
//	uint8_t monthlyheat[4]; //月累计热量 
//	uint8_t monthlyflow[4]; //月累计流量
//	uint8_t monthlycold[4]; //月累计冷量

//}Except_Mbus_BUFFER;

typedef struct

{
	uint16_t coef_1;             //第1流量点系数存储地址
	uint16_t coef_2;             //第2流量点系数存储地址
	uint16_t coef_3;             //第3流量点系数存储地址
	uint16_t coef_4;             //第4流量点系数存储地址
	uint16_t coef_5;             //第5流量点系数存储地址
			 
	uint16_t ignore_add;         //始动量存储地址
	uint16_t static_time_add;    //静止时间差存储地址										
	uint16_t pipeline_add;       //管道长度存储地址		
			 																				
	uint16_t ee_flowpoint_1;     //第1流量点节点差存储地址
  uint16_t ee_flowpoint_2;     //第2流量点节点差存储地址
  uint16_t ee_flowpoint_3;     //第3流量点节点差存储地址
  uint16_t ee_flowpoint_4;     //第4流量点节点差存储地址
  uint16_t ee_flowpoint_5;     //第5流量点节点差存储地址

}COEF_SWITCH;


typedef struct

{
	uint16_t monthly_heatdata;             //初始月累计热量存储地址
	uint16_t monthly_heatunit;             //初始月累计热量单位存储地址
	uint16_t monthly_colddata;             //初始月累计冷量存储地址
	uint16_t monthly_coldunit;             //初始月累计冷量单位存储地址
	uint16_t monthly_flowdata;             //初始月累计流量存储地址
  uint16_t monthly_flowunit;             //初始月累计流量单位存储地址

}month_basicadd_group;                   

void ceebic_eeprom_port_init(void);     //eeprom端口设置函数
void ceebic_eeprom_writeport_init(void);//eeprom写保护引脚设置

	
void cc_add_read (void);                //热表地址读取函数，将0x0000中存储的地址数据读取到对应的数组中
void cc_add_store(void);                //热表地址存储函数，将MBUS或红外中获得的地址数据（从对应的数组中取数）存储到地址位0x0000中 

void cc_sumflow_read (void);            //累计流量读取函数
void cc_sumflow_store(void);            //累计流量存储函数
void cc_sumflow_unitchange_store(void); //累计流量存储函数(单位更改时存储截止至昨天24:00的数据)

void cc_sumheat_read (void);            //累计热量读取函数
void cc_sumheat_store(void);            //累计热量读取函数
void cc_sumheat_unitchange_store(void); //累计热量存储函数（单位更改时存储截止至昨天24:00的数据）

void cc_sumcold_read (void);            //累计冷量读取函数
void cc_sumcold_store(void);            //累计冷量存储函数
void cc_sumcold_unitchange_store(void); //累计热量存储函数（单位更改时存储截止至昨天24:00的数据）

void cc_sum_store(void);
void cc_sum_read(void);
void cc_sum_unitchange_store(void);

void cc_d_store(void);           //仪表口径设定函数 
void cc_d_read (void);           //热表口径读取函数

void cc_dist_read (void);        //传感器距离读取函数
void cc_dist_store(void);        //传感器距离存储函数

void cc_worktime_read (void);    //累计工作时间读取函数
void cc_worktime_store(void);    //累计工作时间存储函数

void cc_sumheat_set(void);//每日24:00调用，读取累积量数据
	
void cc_sumflow_set(void);//每日24:00调用，读取累积量数据
	
void cc_sumcold_set(void);//每日24:00调用，读取累积量数据

void cc_worktime_read (void);		//累计工作时间读取函数
void cc_worktime_store(void);	  //累计工作时间存储函数

void cc_position_read (void);   //安装位置读取函数 
void cc_position_store(void);   //安装位置存储函数 

void cc_coef_store(int i);      //声道系数存储函数，输入量为待配置系数对应声道数
void cc_coef_read (int i);      //声道系数读取函数，输入量为待查询系数对应声道数

void cc_time_store(void);       //仪表时间设定函数

void cc_serial_set_store(void);   //串口通讯参数存储函数
void cc_serial_set_read(void) ;   //串口通讯参数读取函数

void cc_unit_read(void); //单位设定读取函数
void cc_unit_store(void);//单位设定存储函数



//常规累积量存储：将全局变量里的累计时间，累计热量，累计冷量，累计流量写入Eeprom中。 
void cc_dailyheat_read(void);   //日累计热量读取函数
void cc_dailycold_read(void);   //日累计冷量读取函数
void cc_dailyflow_read(void);   //日累计流量读取函数

void cc_dailyheat_store(void);   //日累计热量存储函数
void cc_dailycold_store(void);   //日累计冷量存储函数
void cc_dailyflow_store(void);   //日累计流量存储函数
//void cc_state_read(void);      //仪表状态读取函数 
void cc_daily_sum_store(void);   //日累计常规存储函数
void cc_daliy_sum_exactly_store(void);//定时在每天24:00将日累计量存储地址中的数据转存至对应天的存储地址，并将总量加至总累积量与当前月累积量中并分别存储到总累计量与当前月累积量地址中
void cc_daliy_sum_read(void);    //上电后运行，读取已保存的每日累积量数据至数组中

void cc_dailyheat_exactly_store(void);   //日累计热量存储函数(历史数据)
void cc_dailycold_exactly_store(void);   //日累计冷量存储函数(历史数据)
void cc_dailyflow_exactly_store(void);   //日累计流量存储函数(历史数据)

void cc_monthly_sum_store(void);            //月累计总量存储函数（累加）
void cc_monthly_sum_exactly_store(void);    //月累计总量存储函数（历史数据）          
void cc_monthly_sum_read(uint8_t year,uint8_t month);//月累计总量读取函数（历史数据）

void cc_normal_sum_read (void);         //将累积热量、累计冷量与累计流量分别从eeprom的日计量热量与日累计流量地址中读取出来
void cc_normal_sum_store(void);        //将累积热量、累计冷量与累计流量分别存储到eeprom的日计量热量与日累计流量地址中



void cc_monthly_sum_store   (void);       //定时在每月最后一天将当前月累计量存储地址中的数据转存至对应月的存储地址

void cc_store(void);
void cc_read(void);

#endif

